6.9. Glibc-2.19

El paquete Glibc contiene la librería C principal. Esta librería proporciona todas las rutinas básicas para la ubicación de memoria, búsqueda de directorios, abrir y cerrar archivos, la lectura y escritura de archivos, manejo de cadenas, coincidencia de patrones, aritmética, etc.

Tiempo aproximado de construcción: 17.1 SBU
Espacio requerido en disco: 922 MB

6.9.1. Instalación de Glibc

[Note]

Nota

Algunos paquetes externos a LFS sugieren la instalación de GNU libiconv con el fin de traducir datos de una codificación a otra. La página principal del proyecto (http://www.gnu.org/software/libiconv/) dice dice "Esta biblioteca proporciona una implementacióniconv() implementation, para su uso en sistemas que no tienen una, o cuya implementación no puede convertir de/a Unicode Glibc provee una implementación iconv() y puede convertir de/a Unicode, por lo tanto libiconv no es necesaria en un sistema LFS.

Primero corrige un problema menor instalando el script tzselect:

sed -i 's/\\$$(pwd)/`pwd`/' timezone/Makefile

Algunos de los programas de Glibc usan el directorio no FHS /var/db para almacenar sus datos en Espacio requerido en disco de ejecución. Aplica el siguiente parche para hacer que este tipo de programas almacenen sus datos en Espacio requerido en disco de ejecución en los lugares con FHS:

patch -Np1 -i ../glibc-2.19-fhs-1.patch

El sistema de construcción de Glibc es autocontenido y se instalará perfectamente, a pesar de que el fichero de especificaciones del compilador y enlazador todavía apunten a / tools. Las especificaciones y el enlazador no se pueden ajustar antes de instalar Glibc, debido a que las comprobaciones del autoconf de Glibc darían resultados erróneos y esto arruinaría nuestro objetivo de conseguir una construcción limpia.

La documentación de Glibc recomienda construirlo fuera del directorio de fuentes, en un directorio de construcción dedicado:

mkdir -v ../glibc-build
cd ../glibc-build

Prepara Glibc para su compilación:

../glibc-2.19/configure    \
    --prefix=/usr          \
    --disable-profile      \
    --enable-kernel=2.6.32 \
    --enable-obsolete-rpc

El significado de las nuevas opciones de configure:

--enable-obsolete-rpc

Se instala NIS y RPC encabezados relacionados que no se instalan por defecto; estos son necesarios para reconstruir Glibc y varios paquetes de BLFS.

Compila el paquete:

make
[Important]

Importante

En esta sección, el banco de pruebas para Glibc se considera crítico. No te lo saltes bajo ninguna circunstancia.

Por lo general un par de pruebas darán fallos, pero por lo general puede ignorar cualquiera de los fallos de las pruebas que figuran a continuación. Ahora probemos los resultados de la compilación:

make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log

Es probable que vea un (ignorado) fracaso esperado en el posix/annexc y conform/run-conformtest tests. Además, el banco de pruebas de Glibc depende en cierta medida del sistema host. Esta es una lista de los problemas más comunes:

  • El nptl/tst-clock2, nptl/tst-attr3, tst/tst-cputimer1 y pruebas rt/tst-cpuclock2 se saben que van a fallar. La razón no se entiende totalmente, pero hay indicios de que los problemas de Espacio requerido en disco de menor importancia pueden desencadenar estos fracasos.

  • La prueba math falla en ocasiones cuando se ejecuta en sistemas donde la CPU no es un relativamente nuevo procesador Intel genuina o una AMD.

  • Cuando se ejecutan en hardware antiguo y lento, o en sistemas bajo carga, algunas pruebas pueden fallar debido a los Espacio requerido en discos de espera de las pruebas que se sobrepasen. La modificación de la orden make check para establecer un TIMEOUTFACTOR se informa para ayudar a eliminar estos errores (por ejemplo TIMEOUTFACTOR=16 make -k check).

  • posix/tst-getaddrinfo4 siempre fallará debido a no tener una conexión de red cuando se ejecuta la prueba.

  • libio / tst-ftell-parcial-wide.out falla porque necesita una configuración regional que aún no se ha generado.

  • Otras pruebas conocidas por fallar en diversas arquitecturas son posix/bug-regex32, misc/tst-writev, elf/check-textrel, nptl/tst-getpid2, nptl/tst-robust8, and stdio-common/bug22.

Aunque se trata de un mensaje inofensivo, la fase de instalación de Glibc se quejará de la ausencia de /etc/ld.so.conf. Prevenir esta advertencia con:

touch /etc/ld.so.conf

Instala el paquete:

make install

Instale el archivo de configuración y el directorio de Espacio requerido en disco de ejecución para nscd:

cp -v ../glibc-2.19/nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd

Los locales que hacen que el sistema responda en un idioma diferente no se instalaron con el comando anterior. Ninguno de los locales están obligados, pero si algunos de ellos están desaparecidos, los bancos de pruebas de los paquetes posteriores podrían saltarse pruebas importantes.

Locales individuales pueden instalarse con el programa localedef. Por ejemplo, el primer comando localedef a continuación combina la usr/share/i18n/locales/cs_CZ charset-independent locale definition con la definición charmap/usr/share/i18n/charmaps/UTF-8.gz y añade el resultado al directorio /usr/lib/locale/locale-archive. Las siguientes instrucciones indican cómo instalar el conjunto mínimo de locales necesario para la cobertura de las pruebas:

mkdir -pv /usr/lib/locale
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030

Además, instale el entorno nacional para su propio país, el idioma y juego de caracteres.

Como alternativa, instala todas las locales listados en el archivo glibc-2.19/localedata/SUPPORTED (incluye todas las locales listadas arriba y muchas mas) con el comando siguiente:

make localedata/install-locales

A continuación, utilice el comando localedef para crear e instalar las locales no listadas en el archivo glibc-2.19/localedata/SUPPORTED en el improbable caso de que los necesite.

6.9.2. Configuración de Glibc

El archivo / etc / nsswitch.conf tiene que ser creado, porque aunque Glibc proporciona valores por defecto cuando este fichero no se encuentra o está corrupto, estos valores por defecto no funcionan bien en un entorno de red. La zona horaria también necesita ser configurado.

Crea un nuevo fichero / etc / nsswitch.conf ejecutando lo siguiente:

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF

Instalar datos de zona horaria:

tar -xf ../tzdata2013i.tar.gz

ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}

for tz in etcetera southamerica northamerica europe africa antarctica  \
          asia australasia backward pacificnew systemv; do
    zic -L /dev/null   -d $ZONEINFO       -y "sh yearistype.sh" ${tz}
    zic -L /dev/null   -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
    zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
done

cp -v zone.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

El significado de los comandos zic:

zic -L /dev/null ...

Esto crea zonas horarias POSIX, sin saltos de segundos. Es convencional poner estos en tanto zoneinfo y zoneinfo/POSIX. Es necesario poner las zonas horarias POSIX en zoneinfo, de lo contrario varios test-suites reportarán errores. En un sistema integrado, donde el espacio es reducido y no tiene la intención de actualizar siempre los husos horarios, podría ahorrar 1.9MB al no utilizar el directorio de POSIX, pero algunas aplicaciones o de prueba-suites pueden dar menos buenos resultados

zic -L leapseconds ...

Esto crea zonas horarias adecuadas, incluidos los segundos intercalares. En un sistema integrado, donde el espacio es reducido y no tiene la intención de actualizar siempre las zonas horarias, o se preocupan por el Espacio requerido en disco correcto, se podría ahorrar 1.9MB omitiendo el directorio correcto.

zic ... -p ...

Esto crea el archivo posixrules. Utilizamos Nueva York porque POSIX requiere las reglas de verano ahorro de Espacio requerido en disco para estar en conformidad con las normas de los Estados Unidos.

Una forma de determinar la zona horaria local es ejecutar el siguiente script:

tzselect

Después de contestar algunas preguntas sobre la localización, el guión te mostrará el nombre de la zona horaria (por ejemplo, América/Edmonton). Hay también algunas otras zonas horarias posibles listados en /usr/share/zoneinfo como Canada/Eastern o EST5EDT que no están identificadas por el guión pero que pueden servir.

A continuación, cree el archivo / etc / localtime ejecutando:

cp -v /usr/share/zoneinfo/<xxx> /etc/localtime

Reemplaza <xxx>con el nombre de la zona horaria seleccionada (por ejemplo, Canadá / Madrid).

6.9.3. Configuración del cargador dinámico

Por defecto, el cargador dinámico (/lib/ld-linux.so.2) busca en /lib y /usr/lib las librerías dinámicas que necesitan los programas cuando los ejecutas. No obstante, si hay librerías en otros directorios que no sean /lib and /usr/lib, se deben agregar al archivo /etc/ld.so.conf para que el cargador dinámico pueda encontrarlas. Dos directorios típicos que contienen librerías adicionales son /usr/local/lib y /opt/lib, así que añadimos estos directorios a la ruta de búsqueda del cargador dinámico.

Crea un nuevo fichero /etc/ld.so.conf ejecutando lo siguiente:

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib

EOF

Si se desea, el cargador dinámico también puede buscar un directorio e incluir el contenido de los archivos que se encuentran allí. En general, los archivos de este directorio se incluyen una línea que especifica la ruta de la biblioteca deseada. Para agregar esta capacidad ejecute los siguientes comandos:

cat >> /etc/ld.so.conf << "EOF"
# Add an include directory
include /etc/ld.so.conf.d/*.conf

EOF
mkdir -pv /etc/ld.so.conf.d

6.9.4. Contenido de Glibc

Programas instalados: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, rpcgen, sln, sotruss, sprof, tzselect, xtrace, zdump, and zic
Librerías instaladas: ld.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libcidn.so, libcrypt.{a,so}, libdl.{a,so}, libg.a, libieee.a, libm.{a,so}, libmcheck.a, libmemusage.so, libnsl.{a,so}, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.{a,so}, libpthread_nonshared.a, libresolv.{a,so}, librpcsvc.a, librt.{a,so}, libthread_db.so, and libutil.{a,so}
Directorios instalados: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/rpcsvc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd, and /var/lib/nss_db

Breves descripciones:

catchsegv

Se puede utilizar para crear una traza de la pila cuando un programa termina con una violación de segmento

gencat

Genera catálogos de mensajes

getconf

Muestra los valores de configuración del sistema para variables específicas del sistema de archivos

getent

Obtiene entradas de una base de datos administrativa

iconv

Realiza la conversión de juego de caracteres

iconvconfig

Crea archivos de configuración del módulo iconv fastloading

ldconfig

Configura las asociaciones dinámicas en Espacio requerido en disco de ejecución de engarce

ldd

Muestra las librerías compartidas requeridas por cada programa o librería compartida

lddlibc4

Asiste a ldd con los ficheros objeto

locale

Imprime diversa información sobre la localización actual

localedef

Compila las especificaciones de locales

makedb

Crea una base de datos simple de entrada de texto

mtrace

Lee e interpreta un archivo de rastreo de memoria y muestra un resumen en formato legible

nscd

Un demonio que suministra una caché para las solicitudes de servicio de nombres más comunes

pcprofiledump

Vuelca información generada por un perfil de PC

pldd

Lista objetos compartidos dinámicas utilizadas por los procesos en ejecución

rpcgen

Genera código C para implementar la llamada a procedimiento remoto (RPC) protocolo

sln

Un programa ln enlazado estáticamente

sotruss

Hace llamadas a procedimientos de biblioteca compartida de comando especificado

Traces shared library procedure calls of a specified command

sprof

Lee y muestra datos de objetos compartidos de perfiles

tzselect

Pregunta al usuario acerca de la ubicación del sistema y muestra la descripción de zona horaria correspondiente

xtrace

Traza la ejecución de un programa mediante la función actualmente ejecutada

zdump

El dumper zona horaria

zic

El compilador de la zona horaria

ld.so

El programa de ayuda para las librerías compartidas ejecutables

libBrokenLocale

Se utiliza internamente por Glibc como un hack para conseguir programas rotos (por ejemplo, algunas aplicaciones Motif) en ejecución. Ver comentarios en glibc-2.19/locale/broken_cur_max.c para más información

libSegFault

El manejador de señales de violación de segmento, utilizado por catchsegv

libanl

Un nombre de biblioteca de búsqueda asincrónica

libc

La librería C principal

libcidn

Se utiliza internamente por Glibc para el manejo de nombres de dominio internacionalizados en la funcióngetaddrinfo()

libcrypt

La biblioteca de criptografía

libdl

La biblioteca de interfaz de enlace dinámico

libg

Biblioteca vacía que no contiene funciones. Anteriormente era una biblioteca de Espacio requerido en disco de ejecución para g++

libieee

La vinculación de este módulo fuerza las reglas de manejo de errores para funciones matemáticas como se define por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). El valor predeterminado es el manejo de errores POSIX.1

libm

La biblioteca matemática

libmcheck

Activa la comprobación de la asignación de memoria cuando se vincula con libmemusage

libmemusage

Utilizado por memusage para ayudar a recoger información sobre el uso de memoria de un programa

libnsl

La biblioteca de servicios de red

libnss

Las librerías Name Service Switch, que contiene funciones para la resolución de nombres de host, nombres de usuario, grupos, alias, servicios, protocolos, etc

libpcprofile

Contiene funciones de perfiles utilizadas para la cantidad de Espacio requerido en disco de CPU utilizado por líneas de código fuente específicos

libpthread

La biblioteca de hilos POSIX

libresolv

Proporciona funciones para la creación, envío e interpretación de paquetes a los servidores de nombres de dominio de Internet

librpcsvc

Contiene funciones que prestan servicios RPC diversos

librt

Proporciona funciones para muchas de las interfaces especificadas por el Realtime Extension POSIX.1b

libthread_db

Contiene funciones útiles para construir depuradores para programas multihilo

libutil

Contiene código para funciones "estándar" usadas en diferentes utilidades Unix